Modern high performance computing often requires computing tasks to be distributed and executed on separate computers. Often operators build and deploy computer hardware and software platforms optimized for particular types of computing tasks. For example, some computing tasks may be processor intensive, high-speed memory intensive, data intensive, communication intensive, or combination of the above. Computing tasks are often deployed on computing hardware that is arranged to complement the particular computing tasks they are intended to host. Such arrangements may include additional processors for processor intensive computing tasks, fast local memory and high speed local busses to support local memory intensive tasks, high-performance network interfaces for communication intensive computing tasks, and the like.
In addition, some computing tasks may have operational requirements that may vary during the course of execution. For example, a computing task may begin by retrieving a large amount of data requiring high performance data access, and then once the data has been pulled into local memory the computing task may become processor intensive as it begins to process the retrieved data collections, and so on. In such cases, it may be difficult to arrange a single computing device to optimally execute all phases of the computing task.
In some high performance applications, it may be desirable to execute computing tasks in virtual machines running on the same physical computer. Often the computing tasks in different virtual machines executing on the same physical computer are required to communicate and interact with each other. Even though the computing tasks are hosted on the same physical computer, performance may be hindered by communication and network overhead costs.
If communication and network overhead costs can be reduced, a computing platform can be provided that is significantly faster and more efficient.